// 这是一个使用lseek在一个文件中连续写入字符串的应用

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>

int main(int argc, char *argv[]){

	int fd;		// 文件标识符
	int temp;	// 临时变量，用来记录文件

	char writebuf[30]= {0};

	// 判断是否输入两个参数，其中一个参数为文件名称
	if(argc != 2){
		
		// 如果没有指定文件名称，则提示用户
		printf("Please input the correct name as './exam309lseekFun finename string'\n");
		return -1;
	}
		
	// 如果 不存在该文件则进行创建
	fd = open(*(argv+1), O_RDWR | O_CREAT, S_IRWXU);

	// 打印文件打开情况
	printf("The Descriptor of the filename is : %d\n", fd);

	//if (fd == 0){
	//	printf("文件创建失败@\n");
	//	return -1;
	//}

	// 从键盘接受用户输入的数据
	printf("Please input the context: ");
	
	// fgets函数中会在末尾自动添加换行符号，因此无需自己添加
	fgets(writebuf, sizeof(writebuf), stdin);
	
	int seektemp =0;	// 创建临时变量，用来记录偏移量

	// 在writebuf末尾添加'\n'换行符
	//strcat(writebuf,"\n");

	// 将writebuf中的数据写入到文件中
	temp = write(fd, writebuf, sizeof(writebuf));	
		
	seektemp = lseek(fd,0,SEEK_CUR);
	printf("The length of the file is %d\n", temp);

	int length_file = 0;
	// 连续写入9次，并用endline换行
	for(int i=0; i<9; i++){
		seektemp += temp;
		
		// 从键盘接受要输入的数据，末尾加换行符
		printf("Please input the context: ");
		fgets(writebuf, sizeof(writebuf), stdin);
		
		// 在字符后面加换行符
		//strcat(writebuf, "\n");

		// 更新偏移量
		seektemp = lseek(fd,length_file, SEEK_CUR);

		temp = write(fd, writebuf, strlen(writebuf));
	}
	
	//关闭文件
	close(fd);

}
